# !/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Env: python 3.6


from turtle import *


# 无轨迹跳跃
def my_goto(x, y):
   penup()
   goto(x, y)
   pendown()

# 眼睛
def eyes():
   tracer(False)
   a = 2.5
   for i in range(120):
       if 0 <= i < 30 or 60 <= i < 90:
           a -= 0.05
           lt(3)
           fd(a)
       else:
           a += 0.05
           lt(3)
           fd(a)
   tracer(True)

# 胡须
def beard():
   my_goto(-37, 135)
   seth(165)
   fd(60)

   my_goto(-37, 125)
   seth(180)
   fd(60)

   my_goto(-37, 115)
   seth(193)
   fd(60)

   my_goto(37, 135)
   seth(15)
   fd(60)

   my_goto(37, 125)
   seth(0)
   fd(60)

   my_goto(37, 115)
   seth(-13)
   fd(60)

# 嘴巴
def mouth():
   my_goto(5, 148)
   seth(270)
   fd(100)
   seth(0)
   circle(120, 50)
   seth(230)
   circle(-120, 100)

# 围巾
def scarf():
   fillcolor('#e70010')
   begin_fill()
   seth(0)
   fd(200)
   circle(-5, 90)
   fd(10)
   circle(-5, 90)
   fd(207)
   circle(-5, 90)
   fd(10)
   circle(-5, 90)
   end_fill()

# 鼻子
def nose():
   my_goto(-10, 158)
   fillcolor('#e70010')
   begin_fill()
   circle(20)
   end_fill()

# 黑眼睛
def black_eyes():
   seth(0)
   my_goto(-20, 195)
   fillcolor('#000000')
   begin_fill()
   circle(13)
   end_fill()

   pensize(6)
   my_goto(20, 205)
   seth(75)
   circle(-10, 150)
   pensize(3)

   my_goto(-17, 200)
   seth(0)
   fillcolor('#ffffff')
   begin_fill()
   circle(5)
   end_fill()
   my_goto(0, 0)



# 脸
def face():
   fd(183)
   fillcolor('#ffffff')
   begin_fill()
   lt(45)
   circle(120, 100)

   seth(90)
   eyes()
   seth(180)
   penup()
   fd(60)
   pendown()
   seth(90)
   eyes()
   penup()
   seth(180)
   fd(64)
   pendown()
   seth(215)
   circle(120, 100)
   end_fill()

# 头型
def head():
   penup()
   circle(150, 40)
   pendown()
   fillcolor('#00a0de')
   begin_fill()
   circle(150, 280)
   end_fill()

# 画哆啦A梦
def Doraemon():
   # 头部
   head()

   # 围脖
   scarf()

   # 脸
   face()

   # 红鼻子
   nose()

   # 嘴巴
   mouth()

   # 胡须
   beard()

   # 身体
   my_goto(0, 0)
   seth(0)
   penup()
   circle(150, 50)
   pendown()
   seth(30)
   fd(40)
   seth(70)
   circle(-30, 270)


   fillcolor('#00a0de')
   begin_fill()

   seth(230)
   fd(80)
   seth(90)
   circle(1000, 1)
   seth(-89)
   circle(-1000, 10)

   # print(pos())

   seth(180)
   fd(70)
   seth(90)
   circle(30, 180)
   seth(180)
   fd(70)

   # print(pos())
   seth(100)
   circle(-1000, 9)

   seth(-86)
   circle(1000, 2)
   seth(230)
   fd(40)

   # print(pos())


   circle(-30, 230)
   seth(45)
   fd(81)
   seth(0)
   fd(203)
   circle(5, 90)
   fd(10)
   circle(5, 90)
   fd(7)
   seth(40)
   circle(150, 10)
   seth(30)
   fd(40)
   end_fill()

   # 左手
   seth(70)
   fillcolor('#ffffff')
   begin_fill()
   circle(-30)
   end_fill()

   # 脚
   my_goto(103.74, -182.59)
   seth(0)
   fillcolor('#ffffff')
   begin_fill()
   fd(15)
   circle(-15, 180)
   fd(90)
   circle(-15, 180)
   fd(10)
   end_fill()

   my_goto(-96.26, -182.59)
   seth(180)
   fillcolor('#ffffff')
   begin_fill()
   fd(15)
   circle(15, 180)
   fd(90)
   circle(15, 180)
   fd(10)
   end_fill()

   # 右手
   my_goto(-133.97, -91.81)
   seth(50)
   fillcolor('#ffffff')
   begin_fill()
   circle(30)
   end_fill()

   # 口袋
   my_goto(-103.42, 15.09)
   seth(0)
   fd(38)
   seth(230)
   begin_fill()
   circle(90, 260)
   end_fill()

   my_goto(5, -40)
   seth(0)
   fd(70)
   seth(-90)
   circle(-70, 180)
   seth(0)
   fd(70)

   #铃铛
   my_goto(-103.42, 15.09)
   fd(90)
   seth(70)
   fillcolor('#ffd200')
   # print(pos())
   begin_fill()
   circle(-20)
   end_fill()
   seth(170)
   fillcolor('#ffd200')
   begin_fill()
   circle(-2, 180)
   seth(10)
   circle(-100, 22)
   circle(-2, 180)
   seth(180-10)
   circle(100, 22)
   end_fill()
   goto(-13.42, 15.09)
   seth(250)
   circle(20, 110)
   seth(90)
   fd(15)
   dot(10)
   my_goto(0, -150)

   # 画眼睛
   black_eyes()

if __name__ == '__main__':
   screensize(800,600, "#f0f0f0")
   pensize(3)  # 画笔宽度
   speed(9)    # 画笔速度
   Doraemon()
   my_goto(100, -300)
   write('by Teingi', font=("Bradley Hand ITC", 30, "bold"))
   mainloop()
